// 导入定义验证规则的包
const joi = require('joi')


// 定义用户名和密码的验证规则
const username = joi.string().alphanum().min(2).max(10).required()
const password = joi.string().pattern(/^[\S]{6,12}$/).required()


// 定义 id, nickname, email 的验证规则对象
const id = joi.number().integer().min(1).required()
const nickname = joi.string().required()
const email = joi.string().email().required()

// 定义 avatar 头像的验证规则
const avatar = joi.string().dataUri().required()

// 定义经纬度的验证规则对象
const longitude = joi.string().regex(/^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,18})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,18}|180)$/).required()
const latitude = joi.string().regex(/^(\-|\+)?([0-8]?\d{1}\.\d{0,18}|90\.0{0,18}|[0-8]?\d{1}|90)$/).required()

const time = joi.string().regex(
  /^(19|20)\d\d[-/.]((0[1-9])|([1-9])|(1[0-2]))[-/.](([0-2][1-9])|([1-2]0)|(3[0-1])|([1-9])) (([0-1]\d)|([1-9])|(2[0-3]|(0))):(([0-5]\d)|([1-9])):(([0-5]\d)|([1-9]))$/
).required()
const duration = joi.string().regex(/^(([0-1]\d)|([1-9])|(2[0-3]|(0))):(([0-5]\d)|([1-9])):(([0-5]\d)|([1-9]))$/).required()

// 定义验证骑行记录数据的规则对象
exports.ride_history_schema = {
  body: {
    start_latitude: latitude,
    start_longitude: longitude,
    end_latitude: latitude,
    end_longitude: longitude,
    startTime: time,
    endTime: time,
    duration: duration,
  }
}

// 定义验证注册和登录表单数据的规则对象
exports.reg_login_schema = {
  body: {
    // username: username  --> 可简写为 username
    username,
    password
  }
}


// 定义验证注册和登录表单数据的规则对象
exports.reg_login_schema = {
  body: {
    // username: username  --> 可简写为 username
    username,
    password
  }
}

// 更新用户基本信息的验证规则对象
exports.update_userInfo_schema = {
  // 需要对 req.body 里面的数据进行验证
  body: {
    id,
    nickname,
    email
  }
}

// 更新密码的验证规则对象
exports.update_password_schema = {
  body: {
    oldPwd: password,
    newPwd: joi.not(joi.ref('oldPwd')).concat(password)
  }
}

// 更新头像的验证规则对象
exports.update_avatar_schema = {
  body: {
    avatar
  }
}